package com.airline.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 数据库连接工具类：负责加载驱动、创建数据库连接
 */
public class DBUtil {
    // 数据库连接配置（需根据你的 MySQL 实际情况修改）
    private static final String URL = "jdbc:mysql://localhost:3306/airline_ticketing?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&characterEncoding=utf8";
    private static final String USER = "root";
    private static final String PASSWORD = "123456"; //

    // 静态代码块：加载 MySQL 驱动（仅执行一次）
    static {
        try {
            // MySQL 8.0+ 驱动类名（必须带 cj）
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("MySQL 驱动加载成功！");
        } catch (ClassNotFoundException e) {
            System.err.println("MySQL 驱动加载失败！请检查驱动包是否导入正确");
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接
     * @return 数据库连接对象（Connection）
     * @throws SQLException 连接失败时抛出异常（交给调用者处理）
     */
    public static Connection getConnection() throws SQLException {
        Connection conn = null;
        try {
            // 建立数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
            System.out.println("数据库连接成功！");
        } catch (SQLException e) {
            System.err.println("数据库连接失败！请检查以下配置：");
            System.err.println("1. MySQL 服务是否已启动");
            System.err.println("2. 数据库名（airline_ticketing）是否存在");
            System.err.println("3. 用户名（" + USER + "）和密码是否正确");
            System.err.println("4. 端口号（3306）是否为 MySQL 实际端口");
            e.printStackTrace();
            throw e; // 抛出异常，让调用者感知连接失败
        }
        return conn;
    }

    /**
     * 关闭数据库连接（工具方法，可选）
     * @param conn 待关闭的连接对象
     */
    public static void closeConnection(Connection conn) {
        if (conn != null) {
            try {
                if (!conn.isClosed()) {
                    conn.close();
                    System.out.println("数据库连接已关闭！");
                }
            } catch (SQLException e) {
                System.err.println("关闭数据库连接失败！");
                e.printStackTrace();
            }
        }
    }

    // 测试连接（可选，用于验证配置是否正确）
    public static void main(String[] args) {
        try {
            getConnection(); // 调用连接方法，测试是否能成功连接
        } catch (SQLException e) {
            System.err.println("连接测试失败！");
        }
    }
}